package com.example.spring_mysql

import com.mybatisflex.codegen.Generator
import com.mybatisflex.codegen.config.ColumnConfig
import com.mybatisflex.codegen.config.GlobalConfig
import com.mybatisflex.codegen.config.PackageConfig
import com.mybatisflex.codegen.config.StrategyConfig
import com.mybatisflex.codegen.dialect.IDialect
import com.zaxxer.hikari.HikariDataSource
import javax.sql.DataSource


//import com.baomidou.mybatisplus.generator.FastAutoGenerator
//import com.baomidou.mybatisplus.generator.config.OutputFile
//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy

class Gen1 {
    fun gen(){
//        FastAutoGenerator.create("jdbc:mysql://localhost:3306/spring_test?serverTimezone=UTC", "root", "root")
//            .globalConfig { builder ->
//                builder.author("hjw")
//                    .enableKotlin()  // 关键：启用 Kotlin 支持
//                    .outputDir("src/main/kotlin") // 生成路径
//                    .fileOverride() // 覆盖已生成文件
//                    .disableOpenDir() // 生成后不自动打开目录
//            }
//            .packageConfig { builder ->
//                builder.parent("com.example.spring_mysql") // 包名
//                    .entity("entity")
//                    .mapper("mapper")
//                    .service("service")
//                    .serviceImpl("service.impl")
//                    .controller("controller")
//                    .pathInfo(mapOf(OutputFile.xml to "src/main/resources/mapper"))
//            }
//            .strategyConfig { builder ->
//                builder.entityBuilder()
////                    .enableKotlin()  // 关键：实体启用 Kotlin
//                    .naming(NamingStrategy.underline_to_camel)
//                    .columnNaming(NamingStrategy.underline_to_camel)
//                    .idType(com.baomidou.mybatisplus.annotation.IdType.AUTO)
//                    .logicDeleteColumnName("deleted")
//                builder.controllerBuilder()
//                    .enableRestStyle()
//                builder.mapperBuilder()
//                    .enableBaseResultMap()
//                    .enableBaseColumnList()
//            }
//            .execute()
    }

//    fun gen2(){
//        // 1. 配置数据源
//        val dataSource: DataSource = createDataSource()
//
//
//        // 2. 配置数据库方言
//        val dialect: IDialect = MySqlDialect()
//
//
//        // 3. 创建全局配置（关键：设置为 Kotlin）
//        val globalConfig: GlobalConfig = createGlobalConfig()
//
//
//        // 4. 创建包配置
//        val packageConfig: PackageConfig = createPackageConfig()
//
//
//        // 5. 创建策略配置
//        val strategyConfig: StrategyConfig = createStrategyConfig()
//
//
//        // 6. 创建并执行生成器
//        val generator = Generator(dataSource, globalConfig, dialect)
//        generator.setPackageConfig(packageConfig)
//        generator.setStrategyConfig(strategyConfig)
//        generator.generate()
//    }
//
//    private fun createDataSource(): DataSource {
//        val dataSource = HikariDataSource()
//        dataSource.jdbcUrl = "jdbc:mysql://localhost:3306/your_db?characterEncoding=utf-8&useSSL=false"
//        dataSource.username = "root"
//        dataSource.password = "password"
//        dataSource.driverClassName = "com.mysql.cj.jdbc.Driver"
//        return dataSource
//    }
//
//    private fun createGlobalConfig(): GlobalConfig {
//        val globalConfig = GlobalConfig()
//
//
//        // 关键：设置为 Kotlin 语言
//        globalConfig.setLanguage(Language.KOTLIN)
//
//
//        // 设置输出目录
//        val projectPath = System.getProperty("user.dir")
//        globalConfig.sourceDir = "$projectPath/src/main/kotlin" // Kotlin 代码目录
//        globalConfig.mapperXmlPath = "$projectPath/src/main/resources/mapper"
//
//
//        // 设置作者和生成选项
//        globalConfig.author = "YourName"
//        globalConfig.isEntityGenerateEnable = true
//        globalConfig.isMapperGenerateEnable = true
//        globalConfig.isServiceGenerateEnable = true
//        globalConfig.isServiceImplGenerateEnable = true
//        globalConfig.isControllerGenerateEnable = true
//        globalConfig.isTableDefGenerateEnable = true
//        globalConfig.isMapperXmlGenerateEnable = true
//
//
//        // Kotlin 特有配置
//        globalConfig.setEntityWithDataClass(true) // 生成 data class
//        globalConfig.setEntityWithSerializable(false) // Kotlin 通常不需要 Serializable
//        globalConfig.setEntityWithComments(true) // 生成注释
//
//        return globalConfig
//    }
//
//    private fun createPackageConfig(): PackageConfig {
//        val packageConfig = PackageConfig()
//        packageConfig.setEntity("com.example.domain.entity")
//        packageConfig.setMapper("com.example.mapper")
//        packageConfig.setService("com.example.service")
//        packageConfig.setServiceImpl("com.example.service.impl")
//        packageConfig.setController("com.example.controller")
//        packageConfig.setTableDef("com.example.domain.table")
//        return packageConfig
//    }
//
//    private fun createStrategyConfig(): StrategyConfig {
//        val strategyConfig = StrategyConfig()
//        strategyConfig.setGenerateTable("user", "product")
//
//
//        // 配置逻辑删除字段
//        strategyConfig.setColumnConfig(ColumnConfig("is_deleted").setLogicDelete(true))
//
//
//        // 配置乐观锁字段
//        strategyConfig.setColumnConfig(ColumnConfig("version").setVersion(true))
//
//
//        // 配置时间字段
//        strategyConfig.setColumnConfig(ColumnConfig("create_time").setOnInsertValue("NOW()"))
//        strategyConfig.setColumnConfig(ColumnConfig("update_time").setOnUpdateValue("NOW()"))
//
//        return strategyConfig
//    }
}